/*
 * @lc app=leetcode.cn id=46 lang=javascript
 *
 * [46] 全排列
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
// used数组，其实就是记录此时path里都有哪些元素使用了，一个排列里一个元素只能使用一次
var permute = function(nums) {
  let res = []
  const dfs = (list, used) => {
    if (list.length === nums.length) {
      return res.push(list.slice())
    }
    for (let i = 0; i < nums.length; i++) {
      if (used[i]) {
        continue
      }
      // 做选择
      list.push(nums[i])
      used[i] = true
      dfs(list,used)
      list.pop()
      used[i] = false
    }
  }
  dfs([], [])
  return res
};
// @lc code=end